import router from "@/router";
import nprogress from "nprogress";
import "nprogress/nprogress.css";
import store from "@/store";
import { asyncRountes } from "@/router/index";
// 使用router的beforeEach守卫，在每次路由跳转前执行
const whiteList = ["/login", "/404"];
router.beforeEach(async (to, from, next) => {
  // 开始显示进度条
  nprogress.start();

  // 检查Vuex store中是否存在token
  if (store.getters.token) {
    // 如果目标路由是登录页面，且已经登录（存在token），则重定向到首页
    if (to.path === "/login") {
      next({ path: "/" });
      nprogress.done();
    } else {
      // 如果不是登录页面，则继续跳转
      if (!store.getters.userId) {
        const { roles } = await store.dispatch("user/getUserInfo");
        // console.log(roles.menus); //数组不确定 可能是8个 1个 0个
        // console.log(asyncRountes); //数组 8个
        const accessedRouters = asyncRountes.filter((route) => {
          return roles.menus.includes(route.name);
        });
        store.commit("user/setRoutes", accessedRouters); // 将动态生成的路由信息提交到Vuex store，以便在应用中使用
        router.addRoutes([
          ...accessedRouters,
          { path: "*", redirect: "/404", hidden: true },
        ]); //添加动态路由信息
        next(to.path); // 确保addRoutes已完成, 再访问目标路由
      } else {
        next();
      }
    }
  } else {
    if (whiteList.includes(to.path)) {
      // 如果目标路由在白名单中，则直接进入
      next();
    } else {
      // 如果目标路由不在白名单中，则重定向到登录页面
      next(`/login`);
      nprogress.done();
    }
  }
});

// 使用router的afterEach钩子，在每次路由跳转后执行
router.afterEach(() => {
  // 完成进度条的显示
  nprogress.done();
});
